iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
0

JavaScript 的 Set 像是一種特別的陣列,一個 Set 裡面的任一個資料都是獨一無二的,一般陣列裡可以有多個相同的資料,比如[1 , 1, "foo", "foo"]這樣子,但是在 Set 裡同一筆資料不會出現第二次。

Set 和 Map 有著許多共同的方法。

建立 Set

const set = new Set(["Bulbasaur", "Charmander", "Squirtle", "Pikachu"]);

// or
const set = new Set();
set.add("Bulbasaur");
set.add("Charmander");
set.add("Squirtle");
set.add("Pikachu");

console.log(set);
// Set { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }

不管是用哪種方法建立,只要有重複的資料,在 Set 裡面都只會記錄成一筆資料。

size

set.size;
// 4

has

set.has("Pikachu");
// true

set.has("Ditto");
// false

delete & clear

set.delete("Ditto");
// false
// Set { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }
set.delete("Pikachu");
// true
// Set { "Bulbasaur", "Charmander", "Squirtle" }

set.clear();
// Set {}

如果要刪除的資料在 Set 裡面沒有的話,得到false的回傳值,而 Set 不會改變。如果有,該項資料會從 Set 裡刪除。

clear則是清空整個 Set。

不能用 index 取值

雖然我們可以用陣列來建立 Set,但是不能像陣列那樣使用 index number 取得項目值,只會得到undefined

const arr = ["Bulbasaur", "Charmander", "Squirtle", "Pikachu"];
console.log(arr[3]);
// "Pikachu"

const set = new Set(arr);
console.log(set[3]);
// undefined

迭代

Set 物件也是一個可以迭代的物件,和 Map 一樣,它也擁有entries, keys, values的方法,不過由於 Set 沒有 key 值,所以keyvalues所產生的迭代物件是一樣的。使用上一樣,可以用for..of迴圈,也可以用next分段回傳資料。

set.values();
// { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }

set.keys();
// { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }

set.entries();
// {["Bulbasaur", "Bulbasaur"], ["Charmander", "Charmander"], ["Squirtle", "Squirtle"], ["Pikachu", "Pikachu"]}

上一篇
Day 22: Map
下一篇
Day 24: 正規表達式
系列文
JavaScript 忍者的修練--從下忍進階到中忍30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
hannahpun
iT邦新手 3 級 ‧ 2019-09-26 05:15:30

最特別的是他不會存重複值,還有搜尋跟新增刪除都比 Array 快,但要存取時 Array 存取是 O(1) 還是最快的

但要存取時 Array 存取是 O(1) 還是最快的
這句話可以說明一下嗎?
不過Set沒有 index number,要怎麼取值啊?

原來你有寫過了,哈哈,自己的文章寫不完,都來不及觀摩別人的作品。

hannahpun iT邦新手 3 級 ‧ 2019-09-26 23:33:02 檢舉

我懂我懂 真的是鐵人賽每天都自趕工

我要留言

立即登入留言